#!usr/bin/env python3
# -*- coding:utf-8 -*-

#第二章 字符串和文本

arr=[1,2,3,4,5]

# 切片复习：
'''
第一个冒号两侧的数字是指截取字符串的范围,省略是完全截取原来的字符串.
如果有两个冒号 那么第二个冒号后面是指截取的步长, 比如2是指每2个截取一个. -1指从倒数开始截取.

'''

print(arr[::3]) # 切片 从0到最后一个 每三个截取得到 [1,4]

print(list(zip([12,3],[34,5,7],[8,9])))

import re

line = 'asdf fjdk  ; afed, fjek,asdf, foo'
print(re.split(r'[;,\s]\s*',line))
ls = [1,2,3]  # p54 2017年5月12日18:24:15

i = line.find('afed')
print(i)
reObj = re.compile(r'\d+/\d+/\d+') # 对于多次使用的正则可以先编译一次 然后可以处处使用

text1 = "哈哈哈2017/03/25今天是 2017/06/05 了"
if reObj.match(text1): #match函数只会匹配开始
    print("包含日期字符串")

allmatch=reObj.findall(text1) #返回一个列表 包含所有匹配的字符串
print(allmatch)

#正则分组和提取分组的内容

reObj = re.compile(r'(\d+)/(\d+)/(\d+)')
matchObj = reObj.match('2017/03/20') #match函数只会匹配开始 
matchObj = reObj.search(text1) #search 函数则会搜索整个字符串直到找到一个匹配的项 就立刻返回 
print('matchObj',matchObj)
matchStr = matchObj.group(0) # 匹配的所有字符串
g1 = matchObj.group(1) # 正则中匹配第一个分组的字符串
g2 = matchObj.group(2) # 正则中匹配第二个分组的字符串 以此类推
print(matchStr,g1,g2)

subStr = reObj.sub("--",text1) #把匹配的项替换城 '--'
print(subStr)

# 正则的贪婪模式和非贪婪模式

#默认是贪婪模式，在量词后加个?就是非贪婪模式



import unicodedata
#文本标准化
s1 = 'Spicy Jalape\u00f1o'
s2 = 'Spicy Jalapen\u0303o'
print(s1,s2,s1==s2) # s1 s2 由于编码问题导致储存的时候不一致，实际是一样的字符

t1 = unicodedata.normalize('NFC',s1)
t2 = unicodedata.normalize('NFC',s2)
print(t1==t2)


s = "0112"

print(s.isdecimal(),s.isdigit(),s.isnumeric())

# 去掉字符串中不需要的字符

s = "----hello   word ===="

print(s.lstrip("-")) 
print(s.rstrip("="))
print(s.strip("=-")) #strip 函数不止去掉空白 还可以去掉指定参数的字符

print(s.replace(" ","__"))

s = "pýtĥöñ"

print(s.lower(),unicodedata.normalize('NFD',s))

s = "hello"
#字符串对齐 format 函数是万能的 相对于 s.rjust s.ljust s.center 等函数更加方便使用 
print(format(s,">10")) #在左边填充空白使得字符串长度达到10
print(format(s,"<10")) #在右边填充空白使得字符串长度达到10
s1 = format(s,'^10') #在左右两边填充空白使得字符串长度达到10
print(len(s1)) 

print("".join(str(c) for c in [10,20,30]))

from fnmatch import fnmatch,fnmatchcase # 主要实现模糊匹配

flag = fnmatch("foot.txt",'*.txt') # 这个匹配是根据操作系统来进行大小写敏感匹配的 
print(flag)
flag = fnmatch("foot.txt",'*.TXT') # windows是True ， MacOs 是False
print(flag)

flag = fnmatchcase("foot.txt",'*.TXT') # 根据输入的模式 进行大小写敏感匹配
print(flag) # false






